# -*- coding: utf-8 -*-
from django.core import urlresolvers
from django.db import models
# Create your models here.
from model_utils.models import InheritanceCastModel

class DatoTaxonomico(models.Model):
    nombre = models.CharField(max_length=100, verbose_name='Nombre del Dato Taxonómico')
    nivel = models.IntegerField(verbose_name= 'Nivel de Dato Taxonómico')
    posicion = models.IntegerField( verbose_name= 'Posición del Dato Taxonómico')
    TIPO_DE_DATO_CHOICES = (
        ('R', 'Reino'),
        ('P', 'Phylum'),
        ('C', 'Clase'),
        ('O', 'Orden'),
        ('F', 'Familia'),
        ('G', 'Género'),
        ('E', 'Especie'),
    )
    tipo_dato = models.CharField(max_length=1, choices=TIPO_DE_DATO_CHOICES,
                                verbose_name= 'Tipo de Dato Taxonómico')
    
    #relacion reflexiva, todos los datos pertenecen a alguno de otro tipo, excepto reino que no tiene padre
    padre = models.ForeignKey('DatoTaxonomico',blank=True,null=True)
    #solo los datos de tipo Especie tendran detalle especie
    #detalleEspecie = models.ForeignKey(DetalleEspecie,blank=True,null=True) ###se puso en detalleEspecie
    def __unicode__(self):
        return self.nombre
    
    def get_absolute_url(self):
        return urlresolvers.reverse('datos_taxonomicos:datotax_update', args=(self.pk,))


    
class Dato(InheritanceCastModel):
    nombre = models.CharField(max_length=100,unique=True)
    nivel = models.IntegerField(blank=True,null=True)
    posicion = models.IntegerField(blank=True,null=True)
    
    
    
    
    def get_absolute_url(self):
        return urlresolvers.reverse('datos_taxonomicos:dato_update', args=(self.pk,))

    def en_detalle_html(self):
        datos = [
                #u'Nombre: %s' % self.nombre,
                u'Nivel: %s' % self.nivel,
                u'Posición: %s' % self.posicion,  
                ]
        return datos
    
    def __unicode__(self):
        return self.nombre
    
    
    def object_real_name(self):
        #Aqui se podria hacer comparacion para mostrar el nombre correctamente
        #Por ejemplo, si self.cast()._meta.verbose_name. == articulo return 'Artículo de revista'
        if self.cast()._meta.verbose_name == 'reino':
            return u'Reino'
        elif self.cast()._meta.verbose_name == 'phylum':
            return u'Phylum'
        elif self.cast()._meta.verbose_name == 'clase':
            return u'Clase'
        elif self.cast()._meta.verbose_name == 'orden':
            return u'Orden'
        elif self.cast()._meta.verbose_name == 'familia':
            return u'Familia'
        elif self.cast()._meta.verbose_name == 'genero':
            return u'Género'
        elif self.cast()._meta.verbose_name == 'especie':
            return u'Especie'
        #return self.cast()._meta.verbose_name.capitalize()

class Reino(Dato):

    def get_absolute_url(self):
        return urlresolvers.reverse('datos_taxonomicos:reino_update', args=(self.pk,))
    
    
    
class Phylum(Dato):
    reino = models.ForeignKey(Reino)
    
    def get_absolute_url(self):
        return urlresolvers.reverse('datos_taxonomicos:phylum_update', args=(self.pk,))
    

class Clase(Dato):
    phylum = models.ForeignKey(Phylum)
    
    def get_absolute_url(self):
        return urlresolvers.reverse('datos_taxonomicos:clase_update', args=(self.pk,))

class Orden(Dato):
    clase = models.ForeignKey(Clase)
    
    def get_absolute_url(self):
        return urlresolvers.reverse('datos_taxonomicos:orden_update', args=(self.pk,))

class Familia(Dato):
    orden = models.ForeignKey(Orden)
    
    def get_absolute_url(self):
        return urlresolvers.reverse('datos_taxonomicos:familia_update', args=(self.pk,))
   
class Genero(Dato):
    familia = models.ForeignKey(Familia)
    
    def get_absolute_url(self):
        return urlresolvers.reverse('datos_taxonomicos:genero_update', args=(self.pk,))
    


class Especie(Dato):
    genero = models.ForeignKey(Genero)
    
    def get_absolute_url(self):
        return urlresolvers.reverse('datos_taxonomicos:dato_especie_update', args=(self.pk,))
    
    